package commons.io.in;

import algo_annotations.params.objects.ContrainteGeomAnno;
import algo_lignes_sites.params.objects.contraintesgeom.ContrainteGeomNode;
import commons.params_appli.ParamsAppli;
import commons.data.Attributes;
import commons.data.EchelleGeneralization;
import commons.data.Zones;
import commons.drawing.PointDrawable;
import commons.utils.UtilsGeom;
import commons.utils.primitive_geom.Point_d;
import java.awt.Color;
import java.util.ArrayList;

public class Point_in extends PointDrawable implements IObjetGeo_in {

	// Infos utilisées par les algo LigneSite et Annotation
	public Attributes attributes_in;
	public Zones zones;
	public EchelleGeneralization echelleGeneralization;
	public Color color;
	
	// Utilisé que par l'algo LigneSite
	public ContrainteGeomNode contrainteGeomNode;
	// algo >= v22 : si ce node est temporaire car fusion d'autres node durant le traitement
	public ArrayList<Point_in> vNodeInitFusionne;

	// Utilisé que par l'algo Anno
	public ContrainteGeomAnno contrainteGeomAnno;


	@Override
	public Attributes getAttributes_in() {return attributes_in;}

	@Override
	public Zones getZones() {return zones;}

	
	public Point_in(double x, double y, Attributes attributes_in) {
		super(x, y, ParamsAppli.getParam_d("AutoGene.RAYON_POINT"), ParamsAppli.getParam_c("AutoGene.COULEUR_BORD_POINT"), ParamsAppli.getParam_c("AutoGene.COULEUR_INTERIEUR_POINT"));
		this.attributes_in = attributes_in;
		this.zones = new Zones();
	}

	@Override
	public void clear() {
		attributes_in = null;
		zones = null;
	}

	public String getValue(String fieldName) {
		return attributes_in.getValue(fieldName);
	}

	@Override
	public String toString() {
		return super.toString();
	}
	@Override
	public String getInfoDetaillee() {
		return super.toString() + "\n" + attributes_in.toString();
	}

	@Override
	public IObjetGeo_in makeCopy() {
		Point_in pt = new Point_in(this.x, this.y, this.attributes_in);
		pt.zones = this.zones;
		// Le seul moment ou cette fonction est utilisée, les autres variables ne sont meme pas utilisée
		assert(echelleGeneralization==null && contrainteGeomNode==null && contrainteGeomAnno==null);
		return pt;
	}

	@Override
	// On redéfinit cette fonction, car celle de PointDrawable ne convient pas (elle prend en compte un rayon)
	public double distTo(Point_d pt) {
		return Point_d.distPtPt(this, pt);
	}
}
